#include "stm32f10x.h" // Device header
#include "GPIOInit.h"


/*
GPIO_Mode_AIN：模拟输入
GPIO_Mode_IN_FLOATING：浮空输入
GPIO_Mode_IPD：下拉输入
GPIO_Mode_IPU：上拉输入
GPIO_Mode_Out_OD：开漏输出
GPIO_Mode_Out_PP：推挽输出
GPIO_Mode_AF_OD：复用开漏输出
GPIO_Mode_AF_PP：复用推挽输出
*/


void GPIOInit(GPIOX gpiox, uint16_t pin, GPIOMode mode)
{
    GPIO_TypeDef* GPIOx;

    switch (gpiox) {
        case A:
            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
            GPIOx = GPIOA;
            break;
        case B:
            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
            GPIOx = GPIOB;
            break;
        case C:
            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
            GPIOx = GPIOC;
            break;
        case D:
            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
            GPIOx = GPIOD;
            break;
        case E:
            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
            GPIOx = GPIOE;
            break;
        case F:
            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);
            GPIOx = GPIOF;
            break;
        case G:
            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);
            GPIOx = GPIOG;
            break;
        default:
            return; //非法
    }

    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = mode;
    GPIO_InitStructure.GPIO_Pin = pin;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOx, &GPIO_InitStructure);
}
